home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-05-30 | 1.4 KB | 61 lines | [TEXT/MPS ] |
- # nwsrcfilter -- filter out irrelevant files, put .nw files first
-
- procedure main(args)
- while line := read() do
- if not (line[-1] == "~" | line == "." | find("/RCS", line) |
- (line ? (tab(find("./binaries/")), move(1))) |
- line[3] == line[-1] == "#" | line == "./nwsrcfilter") then
- line ? (="./" & save_file(tab(0)))
- dump_files()
- end
-
- global root
-
- global files_in_input
-
- procedure save_file(name)
- initial {root := table(); files_in_input := set()}
- insert(files_in_input, name)
- name ? do_save(root)
- return
- end
-
- procedure do_save(root)
- if key := tab(upto('/')) & tab(many('/')) then {
- /root[key] := table()
- do_save(root[key])
- } else
- /root[tab(0)] := table()
- end
-
- procedure dump_files(prefix, r)
- /prefix := ""
- /r := root
- if *r = 0 then return
- l := sort(r)
- bubblenw(l)
- every p := !l do
- if *p[2] > 0 then {
- dump_files(prefix || p[1] || "/", p[2])
- if member(files_in_input, prefix || p[1]) then write(prefix, p[1])
- # only dump directories if they were given explicitly
- } else {
- write(prefix, p[1])
- }
- end
-
- procedure bubblenw(l)
- lo := 1 # first non-nw
- while l[lo][1][-3:0] == ".nw" do lo +:= 1
- hi := lo +1 # first succeeding nw
- while l[hi][1][-3:0] ~== ".nw" do hi +:= 1
- while hi <= *l do {
- i := hi
- while i > lo do {l[i] :=: l[i-1]; i -:= 1}
- lo +:= 1
- hi +:= 1
- while l[hi][1][-3:0] ~== ".nw" do hi +:= 1
- }
- return l
- end
-